<?php
/**
 * View_Image
 *
 * Отображение шаблонов, связанных с bpj,hf;tybzvb
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class View_Image  {

	private $_file;            // Название файла с картинкой 
	private $_folder;          // Название папки с картинкой
	private $_defaultFilePath; // Путь к файлу с картинкой по умолчанию (на тот случай, если основная картинка не задана)
	private $_blockWidth;      // Ширина блока для вставки (для автоматического определения маргинов) 
	private $_blockHeight;     // Высота блока для вставки (для автоматического определения маргинов)
	
	private $_imageWidth;
	private $_imageHeight;
	private $_imageMarginLeft = 0;
	private $_imageMarginTop = 0;
	
	
	public function __construct($arrSettings = null) {
    Service_Debug::setDebug();
  	if ($arrSettings) foreach ($arrSettings as $settingName => $settingValue) {
  		$this->_setSetting($settingName, $settingValue);
  	}
  }
  
/**
	 * Метод устанавливает свойство (поисковое)
	 *
	 * @param string $settingName
	 * @param mixed $settingValue
	 */
	private function _setSetting($settingName, $settingValue) {
		switch ($settingName) {
			case 'folder':
				$this->setFolder($settingValue);
				break;
			case 'file':
				$this->setFile($settingValue);
				break;			
				break;
			case 'filePath':
				if (is_array($settingValue)) $this->setFilePathAsArray(); 
				else $this->setFilePath($settingValue);
				break;	
			case 'defaultFilePath':
        $this->setDefaultFilePath($settingValue);
				break;
			case 'blockWidth':
				$this->setBlockWidth($settingValue);
				break;
			case 'blockHeight':
				$this->setBlockHeight($settingValue);
				break;
			default:
				throw new Exception('You are trying to use invalid configuration (' . $settingName . '). The assume settings are: "sizes", "folder", "subFolder", "imageName"');
				break;
		}
	}
	
  /**
   * Устанавливаем папку с изображением
   *
   * @param string $folder
   */
  public function setFolder($folder) {
    $this->_folder = $folder;
  }

  /**
   * Устанавливаем файл с изображением
   *
   * @param string $file
   */
  public function setFile($file) {
    $this->_file = $file;
  }
  /**
   * Устанавливаем ширину блока для вставки картинки (в пикселях)
   *
   * @param integer $blockWidth
   */
  public function setBlockWidth($blockWidth) {
    $this->_blockWidth = $blockWidth;
  }
  /**
   * Устанавливаем высоту блока для вставки картинки (в пикселях)
   *
   * @param integer $blockHeight
   */
  public function setBlockHeight($blockHeight) {
    $this->_blockHeight = $blockHeight;
  }
  /**
   * Устанавливаем путь к фа
   *
   * @param string $defaultFilePath
   */
  public function setDefaultFilePath($defaultFilePath) {
    $this->_defaultFilePath = $defaultFilePath;
  }
  
  /**
   * Устанавливаем полный путь к файлу с изображением (без папок IMAGES/W_IMAGES)
   *
   * @param string $file
   */
  public function setFilePath($filePath) {
    if (empty($filePath)) return false;
  	$arrFoldersAndFile = explode('/', $filePath);
    $this->_file = $arrFoldersAndFile[sizeof($arrFoldersAndFile) - 1];
    $arrFoldersAndFile[sizeof($arrFoldersAndFile) - 1] = '';
    $this->_folder = join('/', $arrFoldersAndFile);
  }
  /**
   * Устанавливаем полный путь к файлу с изображением через массив с pic_file и pic_folder
   *
   * @param array $arrFilePath
   */
  public function setFilePathAsArray($arrFilePath) {
    if (empty($arrFilePath['pic_file']) || empty($arrFilePath['pic_folder'])) return false;
    $this->_file = $arrFilePath['pic_file'];
    $this->_folder = $arrFilePath['pic_folder'];
  }
  
  
  
	/**
	 * Метод определяет маргины для того, чтобы вписать картинку в прямоугольник точно по центру и размеры изображения
	 *
	 * @return mixed - false, если ни основной ни дефолтной картинки не существует
	 */
	public static function getImageHtml() {
		$imagePath = $this->getServerImagePath();
		if (!$imagePath) return false;
		
		list($this->_imageWidth, $this->_imageHeight) = getimagesize($imagePath);
		if (!$this->_imageWidth || ! $this->_imageHeight) return false;
		

		$styleText = 'width:' . $this->_imageWidth . 'px;' . 'height:' . $this->_imageHeight . 'px;';
	  if ($this->_blockWidth) {
	  	$this->_imageMarginLeft = floor(($this->_blockWidth - $this->_imageWidth) / 2);
	  	$styleText .= 'margin-left:' . $this->_imageMarginLeft . 'px;';
	  }
	  if ($this->_blockHeight) {
	  	$this->_imageMarginTop = floor(($this->_blockHeight - $this->_imageHeight) / 2);
	  	$styleText .= 'margin-top:' . $this->_imageMarginTop . 'px;';
	  }
    return '<img src="' . W_IMAGES . $imagePath . '" alt="" style="' . $styleText . '" />';
	}
	
	/**
	 * 
	 * Получает путь к изображению (отсчет идет от папки IMAGES)
	 * @return mixed - false, если ни основной ни дефолтной картинки не существует
	 */
	public function getImagePath() {
		$fullImagePath = IMAGES . $this->_folder . $this->_file;
		if (file_exists($fullImagePath) && is_file($fullImagePath)) return $this->_folder . $this->_file;
		else {  
		  $fullImagePath = $this->_defaultFilePath;
			if (file_exists($fullImagePath) && is_file($fullImagePath)) return $this->_defaultFilePath;
		  else return false;
		}
	}
	
	
}